Разделение/партиционирование данных на части/отдельные сервера
Шард - малая таблица с частью данных
Вертикальный - выделение целых таблиц на отдельный сервер
Горизонтальный - разделение одной таблица на разные сервера. Для огромных таблиц. Нужно выбрать по какому параметру разделяем. Когда несколько миллионов записей в таблице
Стратегии
-
Диапазон (range): простая логика, но риск горячих партиций на «хвостах».
-
Хеш (hash): равномерная нагрузка, но сложнее диапазонные запросы.
-
Consistent hashing: облегчает ребаланс при добавлении узлов.
-
По признаку/гео/клиенту: когда важна локальность данных.
Индексы и запросы
-
Вторичные индексы на шардах: локальные (дешево, но поиск по всем шардам) или глобальные (дорого сопровождать).
-
Scatter-gather: запрос ходит на все шарды — избегать в критичных путях.
Ребаланс
-
Стратегия движения данных (перенос диапазонов/слотов), лимиты на трафик.
-
Версии схем и миграции под шардинг (идемпотентные).
Документировать
-
Ключ шардирования и аргументы выбора.
-
План роста: сколько шардов, когда добавляем, как переносим.
-
Ограничения: кросс-шардовые транзакции/джоины, требования к консистентности.